import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import math

# 读取 CSV 文件
df = pd.read_csv("20181024_d1_0830_0900.csv", encoding="utf-8", header=None)

# 使用 ';' 分隔列数据并转换为多个列
df_split = df[0].str.split('; ', expand=True)
print(df_split)

x = []
y = []
xaccleration = []
yaccleration = []
accleration = []
zhengfu = []
feature_values = []
speed1 = []

# 从第二行起提取数据
for i in range(1, len(df_split)):  # 从第二行开始
    for j in range(0, (len(df_split.columns) -4)// 6):  # 根据数据每6列一个周期提取数据
        # 确保x和y是数值类型
        if pd.isnull(df_split.iloc[i, 6 * j + 4]) or (df_split.iloc[i, 6 * j + 4]==''):
            break
        try:
            y_value = float(df_split.iloc[i, 6 * j + 4])  # 尝试将y值转换为float
            y.append(y_value)
        except ValueError:
            print(i)
            print(j)
            print(df_split.iloc[i, 6 * j + 4])
        x.append(float(df_split.iloc[i, 6 * j + 5]))  # 获取x坐标并转换为float
        # 将加速度值转换为float类型
        xaccleration.append(float(df_split.iloc[i, 6 * j + 7]))  
        yaccleration.append(float(df_split.iloc[i, 6 * j + 8]))  
        # 将速度值转换为float类型
        speed1.append(float(df_split.iloc[i, 6 * j + 6]))  # 获取特征值

# 计算加速度
accleration = list(map(lambda x, y: math.sqrt(x**2 + y**2), xaccleration, yaccleration))

# 判断速度的变化趋势
for i in range(0, len(speed1) - 1):
    if speed1[i] <= speed1[i + 1]:
        zhengfu.append(1)
    else:
        zhengfu.append(-1)
zhengfu.append(zhengfu[len(zhengfu) - 2])  # 最后一项与倒数第二项相同

# 计算特征值
feature_values = list(map(lambda x, y: x * y, accleration, zhengfu))

# 绘制散点图
plt.figure(figsize=(10, 6))  # 设置图形大小
plt.scatter(x, y, c=feature_values, cmap='viridis', s=np.array(feature_values) / 10)  # 除以10来缩放点的大小
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter Plot with Feature Values')

# 设置坐标轴刻度显示间隔
plt.xticks(np.arange(min(x), max(x), (max(x) - min(x)) / 5))  # x轴每隔一定范围显示一个刻度
plt.yticks(np.arange(min(y), max(y), (max(y) - min(y)) / 5))  # y轴每隔一定范围显示一个刻度

# 旋转坐标轴标签，避免重叠
plt.xticks(rotation=45)  # 旋转x轴标签45度
plt.yticks(rotation=45)  # 旋转y轴标签45度

# 添加网格线
plt.grid(True)

# 添加色标
plt.colorbar(label='Feature Value')  # 添加色标

# 显示图形
plt.show()